package com.zjj.algorithm.learning.leetcode.recursion;

/**
 * 231. 2 的幂 简单题
 *
 * 给你一个整数 n，请你判断该整数是否是 2 的幂次方。如果是，返回 true ；否则，返回 false 。
 *
 * 如果存在一个整数 x 使得 n == 2x ，则认为 n 是 2 的幂次方。
 * 示例 1：
 *
 * 输入：n = 1
 * 输出：true
 * 解释：20 = 1
 * 示例 2：
 *
 * 输入：n = 16
 * 输出：true
 * 解释：24 = 16
 * 示例 3：
 *
 * 输入：n = 3
 * 输出：false
 *
 * @author zjj_admin
 * @date 2022/11/11 9:59
 */
public class PowerOfTwo {

    public static void main(String[] args) {

        boolean power = isPowerOfTwo(1073741825);
        System.out.println("power = " + power);

    }


    /**
     * 时间
     * 0 ms
     * 击败
     * 100%
     * 内存
     * 38.7 MB
     * 击败
     * 52.58%
     * @param n
     * @return
     */
    public static boolean isPowerOfTwo(int n) {
        if(n == 1){
            return true;
        }
        //此处使用 long 因为当 n 的数据太大时，就会导致溢出
        for (long i = 1; i <= n; i = i << 1) {
            if(i == n){
                return true;
            }
        }
        return false;
    }

    public static int powerTwo(int x){
        return x * 2;
    }
}
